package entity

import (
	"encoding/json"
	"time"
)

type DateTime time.Time

type SysRole struct {
	RoleId     int64     `gorm:"type:bigint(20);primary_key;auto_increment;角色ID;" json:"roleId"`
	RoleName   string    `gorm:"type:varchar(30);comment:角色名称;" json:"roleName"`
	RoleKey    string    `gorm:"type:varchar(100);comment:角色权限字符串;" json:"roleKey"`
	RoleSort   int       `gorm:"type:int(11);comment:显示顺序;" json:"roleSort"`
	DataScope  string    `gorm:"type:char(1);comment:数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）;" json:"dataScope"`
	Status     string    `gorm:"type:char(1);comment:角色状态（0正常 1停用）;" json:"status"`
	UpdateBy   string    `gorm:"type:varchar(64);comment:更新者;" json:"updateBy"`
	UpdateTime DateTime `json:"updateTime"`
	Remark     string    `gorm:"type:varchar(500);comment:备注;" json:"remark"`
	CreateTime DateTime `json:"createTime"`
	CreateBy   string   `gorm:"type:varchar(32);comment:创建人;column:create_by;"  json:"createBy"`
	DelFlag    int      `gorm:"type:tinyint(1);default:0;comment:删除标记;column:del_flag;" json:"delFlag"`
}

// 映射数据表
func (r *SysRole) TableName() string {
	return "sys_role"
}


// 为DateTime类型实现String方法，用于自定义格式化输出
func (d DateTime) String() string {
	return time.Time(d).Format("2006-01-02 15:04:05")
}

// 日期格式化
func (t SysRole) MarshalJSON() ([]byte, error) {
	type TmpJSON SysRole

	var createTimeStr, updateTimeStr string
	if!time.Time(t.CreateTime).IsZero() {
		createTimeStr = t.CreateTime.String()
	}
	if!time.Time(t.UpdateTime).IsZero() {
		updateTimeStr = time.Time(t.UpdateTime).Format("2006-01-02 15:04:05")
	}

	return json.Marshal(&struct {
		TmpJSON
		CreateTime string `json:"createTime"`
		UpdateTime string `json:"updateTime"`
	}{
		TmpJSON:    (TmpJSON)(t),
		CreateTime: createTimeStr,
		UpdateTime: updateTimeStr,
	})
}



/*
// 插入数据
func (r *SysRole) Insert() error {
	return db.GetMasterGorm().Save(r).Error
}

// 更新数据
func (r *SysRole) Update() error {
	return db.GetMasterGorm().Updates(r).Error
}

// 删除
func (r *SysRole) Delete() error {
	return db.GetMasterGorm().Delete(r).Error
}

// 根据结构体中已有的非空数据来获得单条数据
func (e *SysRole) FindOne() error {
	tb := db.GetMasterGorm()
	if e.RoleId != 0 {
		tb = tb.Where("role_id=?", e.RoleId)
	}
	if e.RoleKey != "" {
		tb = tb.Where("role_key=?", e.RoleKey)
	}
	err := tb.First(e).Error
	return err
}
*/
